

package com.viweb.storemanager.temp;

import java.text.NumberFormat;
import java.util.Locale;

public class ReadNum {
    private static String[] lopdonvi = {""," nghìn"," triệu"," tỷ"};
    static int place = 0; //dùng để đọc phần tử của lớp đơn vị
    static int count = 0; //lấy tổng số lớp đơn vị để kiểm tra khi đọc các trường hợp đặc biệt
    
    private static final String[] sodonvi = {
        "",
        " một",
        " hai",
        " ba",
        " bốn",
        " lăm",
        " sáu",
        " bảy",
        " tám",
        " chín",
    };
    
    private static final String[] sochuc = {
        " linh",
        " mười",
        " hai mươi",
        " ba mươi",
        " bốn mươi",
        " năm mươi",
        " sáu mươi",
        " bảy mươi",
        " tám mươi",
        " chín mươi"
    };
    
    /** Creates a new instance of ReadNum */
    public ReadNum() {
    }
    
    private static String docBachuso(int number) {
        String soFar;
        if (number % 100 < 10){
            soFar = (place != count && number % 100 != 0 ? sochuc[0] : "" ) + ((number % 100 == 5) ? " năm" : sodonvi[number % 100]);
            number /= 100;
        } else {
            soFar = sodonvi[number % 10];
            number /= 10;
            soFar = sochuc[number % 10] + soFar;
            number /= 10;
        }
        if (number == 0) return ((soFar != "" && place != count) ? " không trăm" : "") + soFar;
        
        return (number == 5 ? " năm" : sodonvi[number]) + " trăm" + soFar;
    }
    
    private static String docPhanthapphan(String thapphan) {
        String soFar = "";
        int number = Integer.parseInt(thapphan);
        String special = "";
        if (thapphan.length() == 3 && thapphan.charAt(0) == '0' && thapphan.charAt(1) == '0')
            special = " không trăm linh";
        if (thapphan.length() == 3 && thapphan.charAt(0) != '0' && thapphan.charAt(1) == '0')
            special = " linh";
        if (thapphan.length() == 2 && thapphan.charAt(0) == '0')
            special = " không";
        if (number % 100 < 10){
            soFar = number % 100 == 5 ? " năm" : sodonvi[number % 100];
            number /= 100;
        } else {
            soFar = sodonvi[number % 10];
            number /= 10;
            soFar = sochuc[number % 10] + soFar;
            number /= 10;
        }
        if (number == 0) return special + soFar;
        
        return (number == 5 ? " năm" : sodonvi[number]) + " trăm" + special + soFar;
    }
    
    public static String docSo(Number number, String donvitinh) {
        /* special case */
        if (number.intValue() == 0) { return "không" + donvitinh; }
        String prefix = "";
        if (number.doubleValue() < 0) {
            prefix = "âm ";
        }
        String resultint = "";
        String resultdecimal = "";
        NumberFormat num = NumberFormat.getInstance(Locale.GERMAN);
        String stmp = num.format(number);
        stmp = stmp.replace("-", "");
        String[] arrstringint = stmp.lastIndexOf(',') > -1 ? stmp.substring(0,stmp.lastIndexOf(',')).replace('.',',').split(",") : stmp.replace('.',',').split(",");
        String stringdecimal = stmp.lastIndexOf(',') > -1 ? stmp.substring(stmp.lastIndexOf(',') + 1) : "";
        count = arrstringint.length - 1;
        for (int i = arrstringint.length - 1; i > -1 ; i--) {
            int n = Integer.parseInt(arrstringint[i]);
            if (n != 0) {
                String s = docBachuso(n);
                resultint = s + lopdonvi[place] + resultint;
            }
            place++;
        }
        resultint = resultint.trim().substring(0, 1).toUpperCase() +  resultint.trim().substring(1);
        resultdecimal = (stringdecimal == "" ? "" : " phẩy" + docPhanthapphan(stringdecimal));
        place = count = 0;
        return prefix + resultint + resultdecimal + " " + donvitinh;
    }
    
    private String ReplaceSpecialChar(String str) {
        String strreplace ="`~!@#$%^&*()'+=-";
        if (str.length() == 0)
            return "";
        str = str.trim();
        String chr;
        for(int i=0;i < strreplace.length(); i++) {
            chr = String.valueOf(strreplace.charAt(i));
            str = str.replaceAll(chr,"");
        }
        return str;
    }
    
}
